--- /dev/null
+#
+# Copyright (C) 2014 OpenWrt.org
+#
+# This is free software, licensed under the GNU General Public License v2.
+# See /LICENSE for more information.
+#
+
+include $(TOPDIR)/rules.mk
+
+PKG_NAME:=smstools3
+PKG_VERSION:=3.1.15
+PKG_RELEASE:=1
+
+PKG_LICENSE:=GPL-2.0
+PKG_LICENSE_FILES:=LICENSE
+
+PKG_BUILD_PARALLEL:=0
+
+PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.gz
+PKG_SOURCE_URL:=http://smstools3.kekekasvi.com/packages/
+PKG_MD5SUM:=0241ef60e646fac1a06254a848e61ed7
+
+PKG_BUILD_DIR:=$(BUILD_DIR)/$(PKG_NAME)
+PKG_BUILD_DEPENDS:=libiconv-full iconv socket nsl
+
+include $(INCLUDE_DIR)/package.mk
+
+define Package/smstools3
+ SECTION:=utils
+ CATEGORY:=Utilities
+ TITLE:=SMS Server Tools 3
+ DEPENDS:=+libiconv-full +iconv
+ URL:=http://smstools3.kekekasvi.com/
+endef
+
+define Package/smstools3/description
+ The SMS Server Tools 3 is a SMS Gateway software which can send and receive
+ short messages through GSM modems and mobile phones.
+endef
+
+TARGET_CFLAGS = -D NUMBER_OF_MODEMS=1
+TARGET_CFLAGS += -D USE_ICONV
+TARGET_CFLAGS += -D DISABLE_INET_SOCKET
+TARGET_CFLAGS += -W -Wall
+TARGET_CFLAGS += -D_FILE_OFFSET_BITS=64
+
+TARGET_LDFLAGS += -liconv
+
+BINDIR=/usr/local/bin
+
+define Build/Compile
+ $(MAKE) -C "$(PKG_BUILD_DIR)"/src \
+ CC="$(TARGET_CC)" \
+ USER_CFLAGS='$(TARGET_CFLAGS) $(EXTRA_CFLAGS) $(TARGET_CPPFLAGS) $(EXTRA_CPPFLAGS) \
+ -I"$(STAGING_DIR)/usr/lib/libiconv-full/include"' \
+ USER_LDFLAGS='$(TARGET_LFLAGS) $(EXTRA_LDFLAGS) -L"$(STAGING_DIR)/usr/lib/libiconv-full/lib"' \
+ all
+endef
+
+define Package/smstools3/install
+ $(INSTALL_DIR) $(1)/$(BINDIR)
+ $(INSTALL_BIN) $(PKG_BUILD_DIR)/src/smsd $(1)/$(BINDIR)/smsd
+ $(INSTALL_BIN) $(PKG_BUILD_DIR)/scripts/sendsms $(1)/$(BINDIR)/sendsms
+ $(INSTALL_BIN) $(PKG_BUILD_DIR)/scripts/sms2html $(1)/$(BINDIR)/sms2html
+ $(INSTALL_BIN) $(PKG_BUILD_DIR)/scripts/sms2unicode $(1)/$(BINDIR)/sms2unicode
+ $(INSTALL_BIN) $(PKG_BUILD_DIR)/scripts/unicode2sms $(1)/$(BINDIR)/unicode2sms
+ $(INSTALL_DIR) $(1)/etc/init.d
+ $(INSTALL_DATA) -m 0755 ./files/smstools3.init $(1)/etc/init.d/smstools3
+ $(INSTALL_DIR) $(1)/etc
+ $(INSTALL_DATA) -m 0755 ./files/smstools3.conf $(1)/etc/smsd.conf
+endef
+
+$(eval $(call BuildPackage,smstools3))
--- /dev/null
+#!/bin/sh /etc/rc.common
+# Copyright (C) 2014 OpenWrt.org
+# smsd initscript openwrt mod
+
+START=99
+STOP=99
+
+EXTRA_COMMANDS="status"
+EXTRA_HELP=" status View pid and service status "
+
+# Set USER and GROUP, if necessary:
+USER=""
+GROUP=""
+
+# If an unpriviledged user is selected, make sure that next two
+# files are writable by that user:
+PIDFILE="/var/run/smsd.pid"
+INFOFILE="/var/run/smsd.working"
+# Logfile can also be defined in here:
+LOGFILE="/var/log/smsd.log"
+
+DAEMON=/usr/local/bin/smsd
+# A program which turns power off for couple of seconds:
+RESETMODEMS=/usr/local/bin/smsd_resetmodems
+NAME=smsd
+PSOPT=""
+
+# Set/edit this before starting service !!!!!
+WRT_SPOOL=/var/spool
+
+# Maximum time to stop smsd, after that it gets killed hardly:
+MAXWAIT=45
+
+boot() {
+ start
+}
+
+start() {
+ test -x $DAEMON || exit 0
+
+ echo "Creating minimum spool directories"
+ mkdir -p $WRT_SPOOL
+ mkdir -p $WRT_SPOOL/sms
+ mkdir -p $WRT_SPOOL/sms/incoming
+ mkdir -p $WRT_SPOOL/sms/outgoing
+ mkdir -p $WRT_SPOOL/sms/checked
+ mkdir -p $WRT_SPOOL/sms/failed
+ mkdir -p $WRT_SPOOL/sms/sent
+
+ echo -n "Starting SMS Daemon: "
+ MSG="."
+ ARGS="-n MAINPROCESS -p$PIDFILE -i$INFOFILE"
+ [ "x$USER" != x ] && ARGS="$ARGS -u$USER"
+ [ "x$GROUP" != x ] && ARGS="$ARGS -g$GROUP"
+ [ "x$LOGFILE" != x ] && ARGS="$ARGS -l$LOGFILE"
+ PID=`cat $PIDFILE 2>/dev/null`
+ if [ "x$PID" != x ]; then
+ if kill -0 $PID 2>/dev/null; then
+ MSG=" already running ($PID)."
+ else
+ PID=""
+ fi
+ fi
+ if [ "x$PID" = x ]; then
+ if ps $PSOPT | grep $NAME | grep -v grep >/dev/null; then
+ MSG=" already running."
+ else
+ $DAEMON $ARGS
+ sleep 1
+ PIDS=`ps $PSOPT | grep $NAME | grep -v grep`
+ [ "x$PIDS" = x ] && MSG=" failed."
+ fi
+ fi
+ echo "$NAME$MSG"
+}
+
+stop() {
+ if ps $PSOPT | grep $NAME | grep -v grep >/dev/null; then
+ PID=`cat $PIDFILE 2>/dev/null`
+ if [ "x$PID" != x ]; then
+ P=`kill -0 $PID 2>/dev/null`
+ [ "x$P" != x ] && PID=""
+ fi
+ if [ "x$PID" != x ]; then
+ kill $PID
+ else
+ kill `ps $PSOPT | grep $NAME | grep -v grep | awk '{print $1}'` >/dev/null 2>&1
+ fi
+ sleep 1
+ if ps $PSOPT | grep $NAME | grep -v grep >/dev/null; then
+ echo "Allowing $NAME to terminate gracefully within $MAXWAIT seconds"
+ infofound=0
+ dots=0
+ seconds=0
+ while ps $PSOPT | grep $NAME | grep -v grep >/dev/null; do
+ if [ $infofound -lt 1 ]; then
+ if [ -f $INFOFILE ]; then
+ infofound=1
+ if [ $dots -gt 0 ]; then
+ echo ""
+ dots=0
+ fi
+ $ECHO -n "$NAME is currently "
+ cat $INFOFILE
+ echo "Time counting is now disabled and we will wait until this job is complete."
+ fi
+ fi
+ [ $infofound -lt 1 ] && seconds=`expr $seconds + 1`
+ echo -n "."
+ dots=`expr $dots + 1`
+ if [ "$seconds" -ge $MAXWAIT ]; then
+ if [ $dots -gt 0 ]; then
+ echo ""
+ dots=0
+ fi
+ echo "Timeout occured, killing $NAME hardly."
+ kill -9 `ps $PSOPT | grep $NAME | grep -v grep | awk '{print $1}'` >/dev/null 2>&1
+ [ -f $PIDFILE ] && rm $PIDFILE
+ seconds=0
+ fi
+ sleep 1
+ done
+ [ $dots -gt 0 ] && echo ""
+ #echo "$NAME is stopped."
+ fi
+ fi
+}
+
+restart() {
+ stop
+ start
+}
+
+
+status() {
+ PID=$(cat $PIDFILE)
+
+ test -e $PIDFILE
+ if [ $? == 0 ]; then
+ echo $NAME " running! pid $PID"
+ else
+ echo $NAME " not running !!!"
+ fi
+}
+
+reset() {
+ $0 stop
+ [ -f "$RESETMODEMS" ] && "$RESETMODEMS"
+ sleep 30
+ $0 start
+}
+